/**
 * @Copyright 2012, Founder Mobile Media Technology（Chongqing） Co., Ltd L.P. All
 *            rights reserved. The information contained herein is confidential
 *            and proprietary to Founder Mobile Media Technology（Chongqing） Co.,
 *            Ltd, and considered a trade secret as defined under civil and
 *            criminal statutes. Founder Mobile Media Technology（Chongqing） Co.,
 *            Ltd shall pursue its civil and criminal remedies in the event of
 *            unauthorized use or misappropriation of its trade secrets. Use of
 *            this information by anyone other than authorized employees of
 *            Founder Mobile Media Technology（Chongqing） Co., Ltd is granted
 *            only under a written non-disclosure agreement, expressly
 *            prescribing the scope and manner of such use.
 */
package com.g2room.map;

import java.util.HashMap;
import java.util.Map;

import org.apache.commons.collections.bidimap.DualHashBidiMap;

/**
 * 双向Map
 *
 * @createTime: May 31, 2013 2:32:04 PM
 * @author: <a href="mailto:gaoxg@FOUNDER.COM.CN">Xuguo Gao</a>
 * @version: 0.1
 * @lastVersion: 0.1
 * @updateTime: 
 * @updateAuthor: <a href="mailto:gaoxg@FOUNDER.COM.CN">Xuguo Gao</a>
 * @changesSum: 
 * 
 */
public class BidiMap {
	/**
	 * BidiMap，双向Map，可以通过key找到value， 也可以通过value找到key，<br>
	 * 注意：BidiMap中key不能重复，value也不可以。
	 * 
	 * 实现思路为：使用了两个Map，其中一个作为Key-Value使用，另外一个在put时，<br/>
	 * 把value做为key，key作为value。<br/>
	 * 当根据key查询value时，使用第一个map，此时和普通Map一样；<br/>
	 * 当根据value查询key时，使用第二个map，也即查询的key就是put时的value值。
	 * 
	 * 使用此Map需要引入commons-collections的jar包
	 * @auther <a href="mailto:g2room@163.com">天涯</a>
	 * May 31, 2013 2:32:55 PM
	 */
	public static void bidiMap() {
		// 第一种用法，和Map用法一样
		// 此时实际创建了两个临时Map，分别记录key-value和value-key
		// 根据key查询value时，使用key-value的map；
		// 根据value查询key时，使用value-key的map。
		DualHashBidiMap dualHashBidiMap = new DualHashBidiMap();
		dualHashBidiMap.put("success", "成功");
		dualHashBidiMap.put("fail", "失败");
		dualHashBidiMap.put("wait", "等待");
		System.out.println("根据Key获取Value: fail = " + dualHashBidiMap.get("fail"));
		System.out.println("根据Value获取Key: 等待 = " + dualHashBidiMap.getKey("等待"));
		Map<String, String> student1 = new HashMap<String, String>();
		student1.put("name", "张三");
		student1.put("score", "83");
		student1.put("sex", "男");
		// 第二种用法，让已有的Map也能通过value查找到key
		// 此时实际创建了两个临时Map，分别记录key-value和value-key
		// 但传入的Map会复制到临时的第一个Map里面
		// 根据key查询value时，使用key-value的map；
		// 根据value查询key时，使用value-key的map。
		dualHashBidiMap = new DualHashBidiMap(student1);
		System.out.println("根据Key获取Value: name = " + dualHashBidiMap.get("name"));
		System.out.println("根据Value获取Key: 男 = " + dualHashBidiMap.getKey("男"));
	}
}
